# resize	返回指定形状的新数组。
# append	将元素值添加到数组的末尾。
# insert	沿规定的轴将元素值插入到指定的元素前。
# delete	删掉某个轴上的子数组，并返回删除后的新数组。
# argwhere	返回数组内符合条件的元素的索引值。
# unique	用于删除数组中重复的元素，并按元素值由大到小返回一个新数组

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)  # [[1 2 3] [4 5 6]]
# a数组的形状
print(a.shape)  # (2, 3)
b = np.resize(a, (3, 2))
# b数组
print(b)  # [[1 2] [3 4] [5 6]]
# b数组的形状
print(b.shape)  # (3, 2)
# 修改b数组使其形状大于原始数组
b = np.resize(a, (3, 3))
print(b)  # [[1 2 3] [4 5 6] [1 2 3]]

# resize 仅对原数组进行修改，没有返回值，
# reshape 不仅对原数组进行修改，同时返回修改后的结果

# append 在数组的末尾添加值，它返回一个一维数组。
a = np.array([[1, 2, 3], [4, 5, 6]])
# 向数组a添加元素
print(np.append(a, [7, 8, 9]))  # [1 2 3 4 5 6 7 8 9]
# 沿轴 0 添加元素
print(np.append(a, [[7, 8, 9]], axis=0))  # [[1 2 3] [4 5 6] [7 8 9]]
# 沿轴 1 添加元素
print(np.append(a, [[5, 5, 5], [7, 8, 9]], axis=1))  # [[1 2 3 5 5 5] [4 5 6 7 8 9]]

# insert 表示沿指定的轴，在给定索引值的前一个位置插入相应的值，
# 如果没有提供轴，则输入数组被展开为一维数组。
a = np.array([[1, 2], [3, 4], [5, 6]])
# 不提供axis的情况，会将数组展开
print(np.insert(a, 3, [11, 12]))  # [ 1  2  3 11 12  4  5  6]
# 沿轴 0 垂直方向
print(np.insert(a, 1, [11], axis=0))  # [[ 1  2] [11 11] [ 3  4] [ 5  6]]
# 沿轴 1 水平方向
print(np.insert(a, 1, 11, axis=1))  # [[ 1 11  2] [ 3 11  4] [ 5 11  6]]

# delete该方法表示从输入数组中删除指定的子数组，并返回一个新数组。
# 它与 insert() 函数相似，若不提供 axis 参数，则输入数组被展开为一维数组。
a = np.arange(12).reshape(3, 4)
# a数组
print(a)  # [[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
# 不提供axis参数情况
print(np.delete(a, 5))  # [ 0  1  2  3  4  6  7  8  9 10 11]
# 删除第二列
print(np.delete(a, 1, axis=1))  # [[ 0  2  3][ 4  6  7][ 8 10 11]]
# 删除经切片后的数组
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(np.delete(a, np.s_[::2]))  # [ 2  4  6  8 10]

# argwhere 该函数返回数组中非 0 元素的索引，若是多维数组则返回行、列索引组成的索引坐标。
x = np.arange(6).reshape(2, 3)
print(x)  # [[0 1 2] [3 4 5]]
# 返回所有大于1的元素索引
y = np.argwhere(x > 1)
print(y)  # [[0 2] [1 0] [1 1] [1 2]]

# unique 用于删除数组中重复的元素
a = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])
print(a)  # [5 2 6 2 7 5 6 8 2 9]
# 对a数组的去重
uq = np.unique(a)
print(uq)  # [2 5 6 7 8 9]
u, indices = np.unique(a, return_index=True)  # [1 0 2 4 7 9]
ui, indices = np.unique(a, return_inverse=True)
# 去重数组的下标： [2 5 6 7 8 9]  原数组在新数组中的下标： [1 0 2 0 3 1 2 4 0 5]
uc, indices = np.unique(a, return_counts=True)
# 返回去重元素的重复数量：[2 5 6 7 8 9]  统计重复元素出现次数： [3 2 2 1 1 1]
